#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <stdlib.h>

int main() {
    int pipefd[2];
    pid_t left_pid, right_pid;

    // 1. 创建管道
    if (pipe(pipefd) == -1) {
        perror("pipe");
        exit(1);
    }

    // 2. 创建左侧进程 (echo good morning)
    left_pid = fork();
    if (left_pid == 0) {
        // 子进程：左侧
        close(pipefd[0]);  // 关闭读端
        dup2(pipefd[1], STDOUT_FILENO);  // 标准输出重定向到管道写端
        close(pipefd[1]);  // 关闭原写端

        execlp("echo", "echo", "good", "morning", NULL);
        perror("execlp echo");
        exit(1);
    }

    // 3. 创建右侧进程 (sed s/good/hi/g)
    right_pid = fork();
    if (right_pid == 0) {
        // 子进程：右侧
        close(pipefd[1]);  // 关闭写端
        dup2(pipefd[0], STDIN_FILENO);   // 标准输入重定向到管道读端
        close(pipefd[0]);  // 关闭原读端

        execlp("sed", "sed", "s/good/hi/g", NULL);
        perror("execlp sed");
        exit(1);
    }

    // 4. 父进程关闭管道两端
    close(pipefd[0]);
    close(pipefd[1]);

    // 5. 等待两个子进程结束
    waitpid(left_pid, NULL, 0);
    waitpid(right_pid, NULL, 0);

    return 0;
}
